package yourapp.expense.entity;

/**
 * 每个支出记录都可以关联一个支付软件分类，用于记录支付渠道信息
 *
 * @author YourName
 * @version 1.0
 * @since 2024
 */
public class PaymentAppCategory {
  private int paymentAppCategoryId;
  // 在数据库中有长度限制(NVARCHAR(100))，所以这里也要进行长度验证
  private String name;

  public PaymentAppCategory() {}

  public PaymentAppCategory(int paymentAppCategoryId, String name) {
    this.paymentAppCategoryId = paymentAppCategoryId;
    this.name = name;
  }

  // Getter和Setter方法
  public int getPaymentAppCategoryId() {
    return paymentAppCategoryId;
  }

  public void setPaymentAppCategoryId(int paymentAppCategoryId) {
    // 基础验证：ID应该是非负数
    if (paymentAppCategoryId < 0) {
      throw new IllegalArgumentException("支付软件分类ID不能为负数");
    }
    this.paymentAppCategoryId = paymentAppCategoryId;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    // 数据验证：名称不能为null或空字符串
    if (name == null || name.trim().isEmpty()) {
      throw new IllegalArgumentException("支付软件分类名称不能为空");
    }

    // 数据验证：名称长度不能超过数据库限制(100个字符)
    if (name.trim().length() > 100) {
      throw new IllegalArgumentException("支付软件分类名称长度不能超过100个字符");
    }

    this.name = name.trim(); // 去除前后空格后赋值
  }

  // toString方法（用于测试）
  @Override
  public String toString() {
    // 使用String.format进行格式化，提高可读性
    return String.format("PaymentAppCategory{id=%d, name='%s'}",
        paymentAppCategoryId, name);
  }
}